//
//  CZHomeTableViewController.swift
//  WHWeiBo01
//
//  Created by whitcast on 16/7/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD

//  重用标记
private let HomeTableViewCellIdentifier = "HomeTableViewCellIdentifier"
class CZHomeTableViewController: CZVisitorTableViewController {

    //  懒加载ViewModel对象
    private lazy var statusListViewModel: CZStatusListViewModel = CZStatusListViewModel()
    // MARK: 懒加载控件
    private lazy var pullUpView: UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicatorView.color = UIColor.redColor()
        return indicatorView
    }()
    //  使用系统的下拉刷新
//    private lazy var pullDownView: UIRefreshControl = {
//        let ctr = UIRefreshControl()
//        //  添加下拉刷新事件
//        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
//        return ctr
//    }()
    //  使用自定义的下拉刷新
    private lazy var pullDownView: CZRefreshControl = {
        let ctr = CZRefreshControl()
         //  添加下拉刷新事件
        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        
        return ctr
    }()
    
    //  tipLabel
    private lazy var tipLabel: UILabel = {
        let label = UILabel(textColor: UIColor.whiteColor(), fontSize: 12)
        label.backgroundColor = UIColor.orangeColor()
        label.textAlignment = .Center
        //  默认情况下隐藏
        label.hidden = true
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if isLogin {
            setupUI()
            //  设置tableview相关操作
            setupTableView()
            //  登录
            loadStatus()
        } else {
            //  未登录
            visitorView?.updateVisitorInfo(nil, imageName: nil)
        }
    }
    
    //  添加控件设置约束
    private func setupUI() {
        
        guard let nav = self.navigationController else {
            return
        }
        
        nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
        tipLabel.frame = CGRect(x: 0, y: 64-30, width: nav.navigationBar.width, height: 30)
        
  
    }
    
    // MARK:    --开启tip动画
    private func startAnimation(message: String) {
        //  如果在执行动画,则不需要再次执行,通过是否显示这个label可以知道是否在执行动画
        if tipLabel.hidden == false {
            return
        }
        //  显示tipLabel
        tipLabel.hidden = false
        //  设置tip动画显示的内容
        tipLabel.text = message
        UIView.animateWithDuration(1, animations: { () -> Void in
             self.tipLabel.transform = CGAffineTransformMakeTranslation(0, self.tipLabel.height)
            }) { (_) -> Void in
                
                UIView.animateWithDuration(1, animations: { () -> Void in
                    self.tipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        //  动画执行完成以后隐藏tipLabel
                        self.tipLabel.hidden = true
                })
                
                
                
        }
        
        
       
        
        
    
    }
    
    
    //  设置tableview相关操作
    private func setupTableView() {
        //  注册cell
        tableView.registerClass(CZStatusTableViewCell.self, forCellReuseIdentifier: HomeTableViewCellIdentifier)
        //  去掉分隔线
        tableView.separatorStyle = .None
        //  设置自动行高, 通过约束设置高度
        tableView.rowHeight = UITableViewAutomaticDimension
        //  预估行高越接近真实高度越好
        tableView.estimatedRowHeight = 200
        
        //  集成系统的下拉刷新,有两种方式
        //  第一种直接设置UITableViewController里的refreshControl的属性
        //self.refreshControl = pullDownView
        //  第二种方式如果你的控制器不是UITableViewController, 那么你应该有tabelView
        //  使用tableView直接添加UIRefreshControl然后给我们集成下拉刷新的效果
        //tableView.addSubview(pullDownView)
        
        //  添加自定义下拉刷新
        tableView.addSubview(pullDownView)
        
        
        //  添加footView
        tableView.tableFooterView = pullUpView
        
        //  指定大小
        pullUpView.sizeToFit()
        
    }
    //  下拉刷新
    @objc private func pullDownRefresh() {
        // 加载下拉刷新的数据
        loadStatus()
        
         //  仿照数据加载完成
//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
//            //  结束刷新
//            print("你让我加载数了,少年")
//            self.pullDownView.endRefreshing()
//        })
//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
//            //  结束刷新
//            self.pullDownView.endRefreshing()
//        })
    
    }
    
    
    
    
    //  结束刷新
    private func endRefreshing() {
        //  停止动画
        pullUpView.stopAnimating()
        //  结束系统的下拉刷新
        //pullDownView.endRefreshing()
        //  自定义下拉刷新
        pullDownView.endRefreshing()
    }
    
    
    //  加载微博数据
    private func loadStatus() {
        //  pullUpView.isAnimating() , 如果这个值为true,开启菊花转,执行上拉加载,否则 进行下拉刷新或者得到最信息数据
        
        statusListViewModel.loadStatus(pullUpView.isAnimating()) { (isSuccess, message) -> () in
            if !self.pullUpView.isAnimating() {
                //  开启tip动画
                self.startAnimation(message)
            }
            
            //  结束刷新
            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
//        CZNetworkTools.sharedToos.loadStatus { (response, error) -> () in
//            if error != nil {
//                print(error)
//                return
//            }
//            //  代码执行到此,是成功的回调
//
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//
//            //  代码执行到此字典格式正确
//
//            guard let statusDicArray = dic["statuses"] as? [[String: AnyObject]] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//
//            //  遍历数组完成字典转模型
//            var tempArray = [CZStatus]()
//            for statusDic in statusDicArray {
//                
//                let status = CZStatus(dic: statusDic)
//                tempArray.append(status)
//            }
//            //  设置数据
//            self.statusList = tempArray
//            //  刷新数据
//            self.tableView.reloadData()
//        }
        
        
        
        
//        //  准备接口地址
//        let url = "https://api.weibo.com/2/statuses/friends_timeline.json"
//        //  准备参数
//        let params = [
//            "access_token": CZUserAccountViewModel.shareUserAccount.accessToken!
//        ]
//        
//        print(url + "?access_token=" + CZUserAccountViewModel.shareUserAccount.accessToken!)
//        
//        CZNetworkTools.sharedToos.request(.GET, url: url, params: params) { (response, error) -> () in
//            
//            if error != nil {
//                print(error)
//                return
//            }
//            //  代码执行到此,是成功的回调
//            
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//        
//            //  代码执行到此字典格式正确
//            
//            guard let statusDicArray = dic["statuses"] as? [[String: AnyObject]] else {
//                print("不是一个正确的字典格式")
//                return
//            }
//            
//            //  遍历数组完成字典转模型
//            var tempArray = [CZStatus]()
//            for statusDic in statusDicArray {
//                
//                let status = CZStatus(dic: statusDic)
//                tempArray.append(status)
//            }
//            //  设置数据
//            self.statusList = tempArray
//            //  刷新数据
//            self.tableView.reloadData()
//            
//            
//            
//        }
    
    }
    

}


extension CZHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellIdentifier, forIndexPath: indexPath) as! CZStatusTableViewCell
        //  设置没有选中颜色
        cell.selectionStyle = .None
        let statusViewModel = statusListViewModel.statusList[indexPath.row]
        //  设置需要的ViewModel
        cell.statusViewModel = statusViewModel
        return cell
        
        
        
    }
    
    //  将要显示那个cell
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        //  判断是否是最后一个cell
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullUpView.isAnimating() {
            // 
            //  开启菊花转
            pullUpView.startAnimating()
            print("已经滚动到最后一个cell了")
            //  数据请求
            loadStatus()
        }
        
        
    }
    
    
}









